import type { PageParam, PageResult } from '@vben/request';
import type { Dayjs } from 'dayjs';

import { requestClient } from '#/api/request';

export namespace BillApi {
      /** 账单明细信息 */
    export interface BillItems {
              id: number; // 主键ID
              billId?: number; // 账单ID
              consumptionRecordId?: number; // 消费记录ID
              serviceName?: string; // 服务名称
              quantity?: number; // 数量
              unitPrice?: number; // 单价
              totalAmount?: number; // 总金额
              discountAmount: number; // 优惠金额
              actualAmount?: number; // 实收金额
    }

  /** 结算账单信息 */
  export interface Bill {
            id: number; // 主键ID
            billNumber?: string; // 账单号
            handCardId?: number; // 手牌ID
            memberId: number; // 会员ID
            roomNumber: string; // 房间号
            totalAmount?: number; // 总金额
            discountAmount: number; // 优惠金额
            actualAmount?: number; // 实收金额
            paymentMethod?: string; // 支付方式
            paymentStatus?: string; // 支付状态
            openTime?: string | Dayjs; // 开房时间
            closeTime: string | Dayjs; // 结账时间
            durationMinutes: number; // 消费时长(分钟)
            pointsEarned: number; // 获得积分
            pointsUsed: number; // 使用积分
            remarks: string; // 备注
                billitemss?: BillItems[]
  }
}

/** 查询结算账单分页 */
export function getBillPage(params: PageParam) {
  return requestClient.get<PageResult<BillApi.Bill>>('/spa/bill/page', { params });
}

/** 查询结算账单详情 */
export function getBill(id: number) {
  return requestClient.get<BillApi.Bill>(`/spa/bill/get?id=${id}`);
}

/** 新增结算账单 */
export function createBill(data: BillApi.Bill) {
  return requestClient.post('/spa/bill/create', data);
}

/** 修改结算账单 */
export function updateBill(data: BillApi.Bill) {
  return requestClient.put('/spa/bill/update', data);
}

/** 删除结算账单 */
export function deleteBill(id: number) {
  return requestClient.delete(`/spa/bill/delete?id=${id}`);
}

/** 批量删除结算账单 */
export function deleteBillList(ids: number[]) {
  return requestClient.delete(`/spa/bill/delete-list?ids=${ids.join(',')}`)
}

/** 导出结算账单 */
export function exportBill(params: any) {
  return requestClient.download('/spa/bill/export-excel', params);
}


// ==================== 子表（账单明细） ====================

/** 获得账单明细列表 */
export function getBillItemsListByBillId(billId: number) {
  return requestClient.get<BillApi.BillItems[]>(`/spa/bill/bill-items/list-by-bill-id?billId=${billId}`);
}
